/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.service;

import br.siseventos.dao.da.EventoDAO;
import br.siseventos.dao.da.ItemAvaliacaoEventoDAO;
import br.siseventos.dao.da.PublicoEventoDAO;
import br.siseventos.model.*;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/**
 *
 * @author marcosnatanpacheco
 */
public class EventoService {
    private EventoDAO eventoDao;
    private ItemAvaliacaoEventoDAO itemAvaliacaoEventoDao;
    private PublicoEventoDAO publicoEventoDao;
    
    public EventoService(){
        eventoDao = new EventoDAO();
        itemAvaliacaoEventoDao = new ItemAvaliacaoEventoDAO();
        publicoEventoDao = new PublicoEventoDAO();
    }
    
    public List<TbEvento> getEventos(){
        return getEventoDao().consultarTodos();
    }

    /**
     * @return the eventoDao
     */
    public EventoDAO getEventoDao() {
        return eventoDao;
    }

    /**
     * @param eventoDao the eventoDao to set
     */
    public void setEventoDao(EventoDAO eventoDao) {
        this.eventoDao = eventoDao;
    }

    public ItemAvaliacaoEventoDAO getItemAvaliacaoEventoDao() {
        return itemAvaliacaoEventoDao;
    }

    public void setItemAvaliacaoEventoDao(ItemAvaliacaoEventoDAO itemAvaliacaoEventoDao) {
        this.itemAvaliacaoEventoDao = itemAvaliacaoEventoDao;
    }

    public PublicoEventoDAO getPublicoEventoDao() {
        return publicoEventoDao;
    }

    public void setPublicoEventoDao(PublicoEventoDAO publicoEventoDao) {
        this.publicoEventoDao = publicoEventoDao;
    }
    
    /**
     * Método que encapsula toda a lógica necessária para a inclusão de um evento no sistema
     * @param evento Evento a ser cadastrado
     * @param publicos Publicos associados ao evento
     * @param itensAvaliacao Itens de avaliação associados ao evento
     */
    public void incluir(TbEvento evento, List<TbPublico> publicos, Map<TdItemAvaliacao, Integer> itensAvaliacao)
    {
        try {
            // Cadastrar o evento na tabela de eventos
            getEventoDao().incluir(evento);
            
            // Cadastrar os publicos na tabela associativa entre Evento e Publico
            Iterator<TbPublico> ip = publicos.iterator();
            TbPublico p = null;
            while(ip.hasNext()){
                p = ip.next();
                publicoEventoDao.incluir(new TaPublicoEvento(evento, p));
            }
            
            // Cadastrar os itens de avaliação na tabela associativa entre Evento e Itens de avaliação
            for(Entry<TdItemAvaliacao, Integer> i : itensAvaliacao.entrySet()){
                itemAvaliacaoEventoDao.incluir(new TaItemAvaliacaoEvento(evento, i.getKey(), i.getValue()));
            }
            
        } catch (Exception e) {
        }
    }
    
    
}
